На листах "ТН ВЭД (ЕАЭС)" и "ТН ВЭД (остальные)" находятся данные об импортных и экспортных поставках ферросплавной продукции. Пользуясь данными этой книги ответьте на несколько вопросов и выполните несколько заданий:
1) Какие коды товарной номенклатуры ВЭД применимы для продукции, производимой всеми предприятиями Группы АО "ЧЭМК"? (перечислить предприятия и производимую продукцию).
2) Пользуясь ответами из предыдущего вопроса, перечислите всю товарную номенклатуру, отгружаемую предприятиями Группы АО "ЧЭМК" на экспорт в адрес стран ЕАЭС и в адрес стран за его пределами. Определите ежемесячную долю каждого направления (1 группа - страны ЕАЭС; 2 группа - остальные страны).
3) Пользуясь данными за указанный период определите прознозируемые объемы экспорта до конца 2024 года всех предприятий Группы АО "ЧЭМК". Является ли указанный период репрезентативным для составления прогнозных моделей экспорта? Любой ответ сопроводите обоснованием.
4) Что изменилось в структуре экспортных поставок за указанный период 2024 года? Что стало причиной изменения поставок?
5) Как изменились экспортные цены отгружаемой продукции? Почему?
6) Необязательное задание (творческое). Какие метрики, помимо указанных в предыдущих пунктах, важно проанализировать для составления полной картины экспорта Группы АО "ЧЭМК"?
7) Какие экспортеры (страны, компании) являются конкурентами для Группы АО "ЧЭМК"?
Все задания выполняются стандартными средствами Excel (или с помощью другого ПО). Для выполнения задания можно пользоваться любыми информационными ресурсами и открытыми базами данных по вашему желанию (с указанием источников).
По итогу выполнения задания нам важно узнать, не то, как Вы разбираетесь в узкопрофильных вопросах, а то, какие инструменты Вы применяете для прогнозирования и анализа данных.
Если решение задания по какой-то причине занимает много времени, откажитесь от его выполнения.
(!) Обратите внимание, что:
# Импорт стандартных библиотек
import warnings
# Импорт сторонних библиотек
import pandas as pd
import numpy as np
import plotly.express as px
import matplotlib.pyplot as plt
import seaborn as sns
# Настройка отображения графиков "matplotlib.pyplot"
plt.style.use('fivethirtyeight')
plt.rcParams['lines.linewidth'] = 1.5
# Отключение предупреждений
pd.options.mode.chained_assignment = None
warnings.filterwarnings('ignore')
# Импорт моделей машинного обучения
from sklearn.linear_model import LinearRegression
# Импорт метрики качества модели
from sklearn.metrics import mean_squared_error
# Импорт способов работы с выборками и моделями
from sklearn.model_selection import (
train_test_split,
cross_val_score,
TimeSeriesSplit,
GridSearchCV
)
# Импорт модуля обработки изображений
from PIL import Image
# Объявление константы для воспроизводимости псевдослучайных значений
RANDOM_STATE = 12345
# Отмена ограничений на отображение количества колонок и строк
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
# Отображение формата float
pd.options.display.float_format = '{:20.2f}'.format
try:
df_eaeu = pd.read_excel('Менеджер_аналитик_ЧЭМК_тестовое_задание_для_соискателей.xlsx',
sheet_name=1,
parse_dates=False)
df_other = pd.read_excel('Менеджер_аналитик_ЧЭМК_тестовое_задание_для_соискателей.xlsx',
sheet_name=2,
parse_dates=False)
#parse_dates=[6, 7, 112, 126])
except:
df_eaeu = pd.read_excel('d:\Data_science\Test_tasks\ЧЭМК\
Менеджер_аналитик_ЧЭМК_тестовое_задание_для_соискателей.xlsx',
sheet_name=1,
parse_dates=False)
df_other = pd.read_excel('d:\Data_science\Test_tasks\ЧЭМК\
Менеджер_аналитик_ЧЭМК_тестовое_задание_для_соискателей.xlsx',
sheet_name=2,
parse_dates=False)
#parse_dates=[6, 7, 126])
# Вывод таблицы на экран
df_eaeu.head(2)
| Регистрационный № | Код таможни | Название таможни | Адрес таможни | Дата подачи статформы | Отчетный месяц перемещения товаров | ИМ/ЭК | Код вида транспорта на границе | ИНН отправителя | Наименование отправителя | Адрес отправителя | Регион отправителя | Код страны отправителя | ИНН получателя | Наименование получателя | Адрес получателя | Регион получателя | Код страны получателя | Код торгующей страны | Код страны отправления | Код страны назначения | Код товара по ТН ВЭД ТС | Наименование товара по ТН ВЭД ТС | Вес нетто кг | Цена товара | Статистическая стоимость руб | Статистическая стоимость $ | Код страны происхождения | Количество товара в единице измерения | Краткое наименование единицы измерения | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 10502000/090124/С013808 | 10502000 | ЕКАТЕРИНБУРГСКАЯ ТАМОЖНЯ | СВЕРДЛОВСКАЯ ОБЛАСТЬ/ЕКАТЕРИНБУРГ, УЛ.ГОГОЛЯ, ... | 09.01.2024 | 2024-01 | ИМ | 20 - Железнодорожный транспорт | NaN | АО "ТРАНСНАЦИОНАЛЬНАЯ КОМПАНИЯ "КАЗХРОМ" | NaN | NaN | KZ - КАЗАХСТАН | 6646009256.00 | АО "ПРОМСОРТ-УРАЛ" | 623280, СВЕРДЛОВСКАЯ ОБЛАСТЬ, Г.РЕВДА, УЛ.К.ЛИ... | 65000 СВЕРДЛОВСКАЯ ОБЛАСТЬ | RU - РОССИЯ | KZ - КАЗАХСТАН | KZ - КАЗАХСТАН | RU - РОССИЯ | 7202300000 | 'ФЕРРОСИЛИКОМАРГАНЕЦ. | 69250.00 | 64664.60 | 5799658.00 | 64664.60 | KZ - КАЗАХСТАН | 0 | NaN |
| 1 | 10502000/090124/С018690 | 10502000 | ЕКАТЕРИНБУРГСКАЯ ТАМОЖНЯ | СВЕРДЛОВСКАЯ ОБЛАСТЬ/ЕКАТЕРИНБУРГ, УЛ.ГОГОЛЯ, ... | 09.01.2024 | 2024-01 | ИМ | 20 - Железнодорожный транспорт | NaN | АО "ТРАНСНАЦИОНАЛЬНАЯ КОМПАНИЯ "КАЗХРОМ" | NaN | NaN | KZ - КАЗАХСТАН | 6646009256.00 | АО "ПРОМСОРТ-УРАЛ" | 623280, СВЕРДЛОВСКАЯ ОБЛАСТЬ, Г.РЕВДА, УЛ.К.ЛИ... | 65000 СВЕРДЛОВСКАЯ ОБЛАСТЬ | RU - РОССИЯ | KZ - КАЗАХСТАН | KZ - КАЗАХСТАН | RU - РОССИЯ | 7202300000 | 'ФЕРРОСИЛИКОМАРГАНЕЦ. | 208800.00 | 190057.95 | 17045974.00 | 190057.95 | KZ - КАЗАХСТАН | 0 | NaN |
df_other.head(2)
| Вид декларации | Вид декларации (описание) | Орган оформления | Орган оформления - наименование | Орган оформления - адрес | Орган оформления - город | Дата | Дата выпуска | Направление | Таможенный режим | Таможенный режим (описание) | Условие поставки | Пункт поставки | Код ТН ВЭД | ИНН отправителя | КПП отправителя | ОГРН отправителя | ОКПО отправителя | Основной вид деятельности отправителя | Руководитель компании отправителя | Уставный капитал отправителя | Телефоны отправителя | Электронная почта отправителя | Контактные лица отправителя | Наименование отправителя | Адрес отправителя | Страна отправителя | ИНН получателя | КПП получателя | ОГРН получателя | ОКПО получателя | Основной вид деятельности получателя | Руководитель компании получателя | Уставный капитал получателя | Телефоны получателя | Электронная почта получателя | Контактные лица получателя | Наименование получателя | Адрес получателя | Страна получателя | ИНН контрактодержателя | КПП контрактодержателя | ОГРН контрактодержателя | ОКПО контрактодержателя | Основной вид деятельности контрактодержателя | Руководитель компании контрактодержателя | Уставный капитал контрактодержателя | Телефоны контрактодержателя | Электронная почта контрактодержателя | Контактные лица контрактодержателя | Контрактодержатель | Адрес контрактодержателя | Страна контрактодержателя | ИНН декларанта | КПП декларанта | ОГРН декларанта | ОКПО декларанта | Основной вид деятельности декларанта | Руководитель компании декларанта | Уставный капитал декларанта | Телефоны декларанта | Электронная почта декларанта | Контактные лица декларанта | Наименование декларанта | Адрес декларанта | Страна декларанта | Контейнер (признак) | Количество контейнеров | Всего наименований товаров | Количество мест | Количество грузовых мест | Торгующая страна | Страна происхождения товара | Страна отправления | Страна назначения | Валюта контракта | Изготовитель | Товарный знак | Описание товара | Модели, артикулы ... | Код ОКПО банка/паспорт сделки | Наименование банка | Адрес банка | Телефон банка | БИК банка | Рег. № банка | Дата рег-ции банка | Устав банка | Уставный капитал банка | Лицензия банка | Участие в системе страхования вкладов банка | № филиала банка | Наименование филиала банка | Адрес филиала банка | Дата рег-ции филиала банка | Кол-во ед. изм. | Ед. изм. | Кол-во ед. изм. №2 | Ед. изм. №2 | Кол-во ед. изм. №3 | Ед. изм. №3 | Преференции | Процедура | Квота | Вес брутто | Вес нетто | Нетто-брутто (%) | Общая таможенная стоимость | Общая фактурная стоимость | Валюта таможенной стоимости | Стоимость в рублях | Курс валюты контракта | Дата курса валюты | Стоимость в валюте контракта | Стоимость в долларах США | Цена за кг (USD) | Цена за единицу (USD) | Сумма платежа (USD) | Сумма платежа (RUB) | Цена за единицу (РУБ) | Метод определения таможенной стоимости | № св-ва брокера | Наименование брокера | Адрес брокера | КПП брокера | ОКПО брокера | Дата выдачи св-ва брокера | ИНН таможенного брокера | Фамилия | Телефон | Должность | Наличие КТС | Признак КТС | Наличие ДТС | Завершение тамож. оф. | Место товаров | Место товаров, документ | Место товаров, СВХ-ТС-Лицензия | Таможня склада | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | NaN | NaN | 10317120 | Новороссийский таможенный пост (центр электрон... | 353919 КРАСНОДАРСКИЙ КРАЙ, Г. НОВОРОССИЙСК, МЫ... | NaN | 2024-01-13 | 2024-01-13 | ИМ | 40.00 | Для внутреннего потребления | CIF | НОВОРОССИЙСК | 7202118000 | NaN | NaN | NaN | NaN | NaN | : | NaN | NaN | NaN | NaN | DKMT PLUS Ltd. | 1231400, ROSH PINA, Z.H.R. INDUSТRIAL ZONE, SH... | Израиль (IL) | 7449044528.00 | 745101001.00 | 1047422506614.00 | NaN | NaN | ГЕНЕРАЛЬНЫЙ ДИРЕКТОР: Токарев Артем Андреевич | 30000.00 | +7 (351) 262-1332, +7 (351) 262-4658, +7 (735)... | dynian@gmail.com | Дынин Антон Яковлевич | ООО НПП ТЕХНОЛОГИЯ | 454901, Челябинская область, г. Челябинск, п. ... | Россия (RU) | NaN | 745101001.00 | 1047422506614.00 | NaN | NaN | : | 30000.00 | NaN | NaN | NaN | NaN | NaN | NaN | 7449044528.00 | 745101001.00 | 1047422506614.00 | NaN | NaN | ГЕНЕРАЛЬНЫЙ ДИРЕКТОР: Токарев Артем Андреевич | 30000.00 | +7 (351) 262-1332, +7 (351) 262-4658, +7 (735)... | dynian@gmail.com | Дынин Антон Яковлевич | ООО НПП ТЕХНОЛОГИЯ | 454901, ЧЕЛЯБИНСКАЯ ОБЛ., Г. ЧЕЛЯБИНСК, УЛ. ВО... | NaN | 1 | 2 | 1 | 54 | 54 | Израиль (IL) | Индия (IN) | Индия (IN) | Россия (RU) | USD | A S EXIM | ОТСУТСТВУЕТ | Ферромарганец высокоуглеродистый, марки femn76... | NaN | 22030034/3292/0002/2/1 | АО «Райффайзенбанк» | NaN | NaN | NaN | 3292.00 | NaN | NaN | NaN | NaN | NaN | 2.00 | Уральский | 620075, г. Екатеринбург, ул. Красноармейская, ... | 31.01.2005 | 0 | NaN | 0 | NaN | 0 | NaN | ОООО-ОО | 4000000.00 | 0.00 | 54100.00 | 54000.00 | 0.18 | 5139881.57 | 0.00 | NaN | 5139881.57 | 88.13 | 2024-01-13 00:00:00 | 58320.00 | 58320.00 | 1.08 | 0 | 0 | 0 | 0 | Метод по стоимости сделки с ввозимыми товарами... | NaN | NaN | NaN | NaN | NaN | NaT | NaN | NaN | NaN | NaN | NaN | 0 | NaN | Выпуск разрешен (10) | NaN | NaN | NaN | 10317090.00 |
| 1 | NaN | NaN | 10317120 | Новороссийский таможенный пост (центр электрон... | 353919 КРАСНОДАРСКИЙ КРАЙ, Г. НОВОРОССИЙСК, МЫ... | NaN | 2024-01-03 | 2024-01-03 | ИМ | 40.00 | Для внутреннего потребления | FCA | ISTANBUL | 7202190000 | NaN | 745101001.00 | 1047422506614.00 | NaN | NaN | : | 30000.00 | NaN | NaN | NaN | THE COMPANY ENDEAVOUR TRADING LLC. | ISTANBUL, BARBAROS MAH. SARKAC SK. AGAOGLU MY ... | ОАЭ (AE) | 9725018347.00 | 772601001.00 | 1197746494330.00 | NaN | NaN | ГЕНЕРАЛЬНЫЙ ДИРЕКТОР: Иванова Анна Николаевна | 1500000.00 | NaN | NaN | NaN | ООО "СИНЕРДЖИ ТРЭЙДИНГ" | 115230, г. Москва, Варшавское шоссе, д. 42 | Россия (RU) | NaN | 772601001.00 | 1197746494330.00 | NaN | NaN | : | 1500000.00 | NaN | NaN | NaN | NaN | NaN | NaN | 9725018347.00 | 772601001.00 | 1197746494330.00 | NaN | NaN | ГЕНЕРАЛЬНЫЙ ДИРЕКТОР: Иванова Анна Николаевна | 1500000.00 | NaN | NaN | NaN | ООО "СИНЕРДЖИ ТРЭЙДИНГ" | 115114, РФ, ГОРОД МОСКВА, 1-Й КОЖЕВНИЧЕСКИЙ ПЕ... | NaN | 1 | 2 | 1 | 40 | 40 | ОАЭ (AE) | Индия (IN) | Турция (TR) | Россия (RU) | USD | OSWAL MINERALS LIMITED. | FERROMANGANESE | Ферромарганец фракционный 10-60 мм, фактическо... | NaN | 21120741/1481/1948/2/1 | ПАО Сбербанк | NaN | NaN | NaN | 1481.00 | NaN | NaN | NaN | NaN | NaN | 1948.00 | Московский банк | 109544, Москва, ул. Большая Андроньевская, д. 6 | 17.10.2001 | 0 | NaN | 0 | NaN | 0 | NaN | ОООО-ОО | 4000000.00 | 0.00 | 44830.00 | 40280.00 | 10.15 | 4620959.73 | 0.00 | NaN | 4620959.73 | 89.69 | 2024-01-03 00:00:00 | 44712.00 | 51522.44 | 1.28 | 0 | 0 | 0 | 0 | Метод по стоимости сделки с ввозимыми товарами... | NaN | NaN | NaN | NaN | NaN | NaT | NaN | NaN | NaN | NaN | NaN | 0 | NaN | Выпуск разрешен (10) | NaN | NaN | NaN | 10317090.00 |
Замечание: После загрузки данных, нужно изучить данные и отфильтровать необходимые.
Исходя из условия задачи, постараемся отфильтроваль ненужные стобцы.
# Вывод информации о таблице
df_eaeu.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1275 entries, 0 to 1274 Data columns (total 30 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Регистрационный № 1275 non-null object 1 Код таможни 1275 non-null int64 2 Название таможни 1148 non-null object 3 Адрес таможни 1148 non-null object 4 Дата подачи статформы 1275 non-null object 5 Отчетный месяц перемещения товаров 1275 non-null object 6 ИМ/ЭК 1275 non-null object 7 Код вида транспорта на границе 1275 non-null object 8 ИНН отправителя 548 non-null float64 9 Наименование отправителя 1275 non-null object 10 Адрес отправителя 522 non-null object 11 Регион отправителя 522 non-null object 12 Код страны отправителя 1275 non-null object 13 ИНН получателя 727 non-null float64 14 Наименование получателя 1275 non-null object 15 Адрес получателя 721 non-null object 16 Регион получателя 721 non-null object 17 Код страны получателя 1275 non-null object 18 Код торгующей страны 1275 non-null object 19 Код страны отправления 1275 non-null object 20 Код страны назначения 1275 non-null object 21 Код товара по ТН ВЭД ТС 1275 non-null int64 22 Наименование товара по ТН ВЭД ТС 1100 non-null object 23 Вес нетто кг 1275 non-null float64 24 Цена товара 1275 non-null float64 25 Статистическая стоимость руб 1275 non-null float64 26 Статистическая стоимость $ 1275 non-null float64 27 Код страны происхождения 1275 non-null object 28 Количество товара в единице измерения 1275 non-null int64 29 Краткое наименование единицы измерения 25 non-null object dtypes: float64(6), int64(3), object(21) memory usage: 299.0+ KB
# Фильтрация столбцов исходной таблицы
df_eaeu = df_eaeu[['Дата подачи статформы',
'Отчетный месяц перемещения товаров',
'ИМ/ЭК',
'ИНН отправителя',
'Наименование отправителя',
'Код страны отправителя',
'Код страны отправления',
'Код товара по ТН ВЭД ТС',
'Наименование товара по ТН ВЭД ТС',
'Вес нетто кг',
'Цена товара',
'Статистическая стоимость руб',
'Статистическая стоимость $',
'Код страны происхождения']]
df_eaeu.sample(3)
| Дата подачи статформы | Отчетный месяц перемещения товаров | ИМ/ЭК | ИНН отправителя | Наименование отправителя | Код страны отправителя | Код страны отправления | Код товара по ТН ВЭД ТС | Наименование товара по ТН ВЭД ТС | Вес нетто кг | Цена товара | Статистическая стоимость руб | Статистическая стоимость $ | Код страны происхождения | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1035 | 05.07.2024 | 2024-06 | ИМ | NaN | АО "ТРАНСНАЦИОНАЛЬНАЯ КОМПАНИЯ "КАЗХРОМ" | KZ - КАЗАХСТАН | KZ - КАЗАХСТАН | 7202300000 | 'ФЕРРОСИЛИКОМАРГАНЕЦ. | 138120.00 | 162684.98 | 14482446.00 | 162684.98 | KZ - КАЗАХСТАН |
| 172 | 13.02.2024 | 2024-02 | ЭК | 6732056330.00 | ООО "ЕВРОСПЛАВ" | RU - РОССИЯ | RU - РОССИЯ | 7202210000 | NaN | 21970.00 | 2588066.00 | 2588066.00 | 28393.05 | RU - РОССИЯ |
| 1036 | 05.07.2024 | 2024-06 | ИМ | NaN | АО "ТРАНСНАЦИОНАЛЬНАЯ КОМПАНИЯ "КАЗХРОМ" | KZ - КАЗАХСТАН | KZ - КАЗАХСТАН | 7202300000 | 'ФЕРРОСИЛИКОМАРГАНЕЦ. | 207230.00 | 243246.52 | 21456288.00 | 243246.52 | KZ - КАЗАХСТАН |
# Вывод информации о таблице
df_other.info(max_cols=200)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 2357 entries, 0 to 2356 Data columns (total 139 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Вид декларации 195 non-null object 1 Вид декларации (описание) 139 non-null object 2 Орган оформления 2357 non-null int64 3 Орган оформления - наименование 2357 non-null object 4 Орган оформления - адрес 2357 non-null object 5 Орган оформления - город 0 non-null float64 6 Дата 2357 non-null datetime64[ns] 7 Дата выпуска 2357 non-null datetime64[ns] 8 Направление 2357 non-null object 9 Таможенный режим 2264 non-null float64 10 Таможенный режим (описание) 2264 non-null object 11 Условие поставки 2320 non-null object 12 Пункт поставки 2332 non-null object 13 Код ТН ВЭД 2357 non-null int64 14 ИНН отправителя 1952 non-null float64 15 КПП отправителя 2355 non-null float64 16 ОГРН отправителя 2355 non-null float64 17 ОКПО отправителя 0 non-null float64 18 Основной вид деятельности отправителя 0 non-null float64 19 Руководитель компании отправителя 2357 non-null object 20 Уставный капитал отправителя 2355 non-null float64 21 Телефоны отправителя 1078 non-null object 22 Электронная почта отправителя 225 non-null object 23 Контактные лица отправителя 937 non-null object 24 Наименование отправителя 2357 non-null object 25 Адрес отправителя 2241 non-null object 26 Страна отправителя 1097 non-null object 27 ИНН получателя 475 non-null float64 28 КПП получателя 2354 non-null float64 29 ОГРН получателя 2354 non-null float64 30 ОКПО получателя 0 non-null float64 31 Основной вид деятельности получателя 0 non-null float64 32 Руководитель компании получателя 2357 non-null object 33 Уставный капитал получателя 2354 non-null float64 34 Телефоны получателя 305 non-null object 35 Электронная почта получателя 83 non-null object 36 Контактные лица получателя 292 non-null object 37 Наименование получателя 2354 non-null object 38 Адрес получателя 2331 non-null object 39 Страна получателя 1120 non-null object 40 ИНН контрактодержателя 1090 non-null float64 41 КПП контрактодержателя 2354 non-null float64 42 ОГРН контрактодержателя 2354 non-null float64 43 ОКПО контрактодержателя 0 non-null float64 44 Основной вид деятельности контрактодержателя 0 non-null float64 45 Руководитель компании контрактодержателя 2357 non-null object 46 Уставный капитал контрактодержателя 2354 non-null float64 47 Телефоны контрактодержателя 513 non-null object 48 Электронная почта контрактодержателя 141 non-null object 49 Контактные лица контрактодержателя 465 non-null object 50 Контрактодержатель 1090 non-null object 51 Адрес контрактодержателя 1078 non-null object 52 Страна контрактодержателя 858 non-null object 53 ИНН декларанта 2352 non-null float64 54 КПП декларанта 2354 non-null float64 55 ОГРН декларанта 2354 non-null float64 56 ОКПО декларанта 0 non-null float64 57 Основной вид деятельности декларанта 0 non-null float64 58 Руководитель компании декларанта 2357 non-null object 59 Уставный капитал декларанта 2354 non-null float64 60 Телефоны декларанта 1329 non-null object 61 Электронная почта декларанта 304 non-null object 62 Контактные лица декларанта 1181 non-null object 63 Наименование декларанта 2352 non-null object 64 Адрес декларанта 2322 non-null object 65 Страна декларанта 858 non-null object 66 Контейнер (признак) 2357 non-null int64 67 Количество контейнеров 2357 non-null int64 68 Всего наименований товаров 2357 non-null int64 69 Количество мест 2357 non-null int64 70 Количество грузовых мест 2357 non-null int64 71 Торгующая страна 2328 non-null object 72 Страна происхождения товара 2357 non-null object 73 Страна отправления 2313 non-null object 74 Страна назначения 2325 non-null object 75 Валюта контракта 2332 non-null object 76 Изготовитель 2224 non-null object 77 Товарный знак 2357 non-null object 78 Описание товара 2357 non-null object 79 Модели, артикулы ... 0 non-null float64 80 Код ОКПО банка/паспорт сделки 2215 non-null object 81 Наименование банка 2215 non-null object 82 Адрес банка 0 non-null float64 83 Телефон банка 0 non-null float64 84 БИК банка 0 non-null float64 85 Рег. № банка 2215 non-null float64 86 Дата рег-ции банка 0 non-null float64 87 Устав банка 0 non-null float64 88 Уставный капитал банка 0 non-null float64 89 Лицензия банка 0 non-null float64 90 Участие в системе страхования вкладов банка 0 non-null float64 91 № филиала банка 927 non-null float64 92 Наименование филиала банка 2124 non-null object 93 Адрес филиала банка 927 non-null object 94 Дата рег-ции филиала банка 927 non-null object 95 Кол-во ед. изм. 2357 non-null int64 96 Ед. изм. 0 non-null float64 97 Кол-во ед. изм. №2 2357 non-null int64 98 Ед. изм. №2 1 non-null object 99 Кол-во ед. изм. №3 2357 non-null int64 100 Ед. изм. №3 0 non-null float64 101 Преференции 2321 non-null object 102 Процедура 2242 non-null float64 103 Квота 2357 non-null float64 104 Вес брутто 2357 non-null float64 105 Вес нетто 2357 non-null float64 106 Нетто-брутто (%) 2357 non-null float64 107 Общая таможенная стоимость 2357 non-null float64 108 Общая фактурная стоимость 2357 non-null float64 109 Валюта таможенной стоимости 0 non-null float64 110 Стоимость в рублях 2357 non-null float64 111 Курс валюты контракта 2357 non-null float64 112 Дата курса валюты 2357 non-null object 113 Стоимость в валюте контракта 2357 non-null float64 114 Стоимость в долларах США 2357 non-null float64 115 Цена за кг (USD) 2357 non-null float64 116 Цена за единицу (USD) 2357 non-null int64 117 Сумма платежа (USD) 2357 non-null int64 118 Сумма платежа (RUB) 2357 non-null int64 119 Цена за единицу (РУБ) 2357 non-null int64 120 Метод определения таможенной стоимости 1471 non-null object 121 № св-ва брокера 364 non-null float64 122 Наименование брокера 0 non-null float64 123 Адрес брокера 0 non-null float64 124 КПП брокера 0 non-null float64 125 ОКПО брокера 0 non-null float64 126 Дата выдачи св-ва брокера 165 non-null datetime64[ns] 127 ИНН таможенного брокера 169 non-null float64 128 Фамилия 858 non-null object 129 Телефон 0 non-null float64 130 Должность 0 non-null float64 131 Наличие КТС 0 non-null float64 132 Признак КТС 1680 non-null object 133 Наличие ДТС 0 non-null float64 134 Завершение тамож. оф. 2221 non-null object 135 Место товаров 1105 non-null object 136 Место товаров, документ 0 non-null float64 137 Место товаров, СВХ-ТС-Лицензия 115 non-null object 138 Таможня склада 1757 non-null float64 dtypes: datetime64[ns](3), float64(64), int64(14), object(58) memory usage: 2.5+ MB
# Фильтрация столбцов исходной таблицы
df_other = df_other[['Дата',
'Дата выпуска',
'Направление',
'Код ТН ВЭД',
'ИНН отправителя',
'Наименование отправителя',
'Страна отправителя',
'ИНН контрактодержателя',
'Контрактодержатель',
'Страна контрактодержателя',
'ИНН декларанта',
'Страна декларанта',
'Изготовитель',
'Описание товара',
'Вес нетто',
'Стоимость в рублях',
'Курс валюты контракта',
'Дата курса валюты',
'Стоимость в валюте контракта',
'Стоимость в долларах США',
'Цена за кг (USD)']]
df_other.sample(3)
| Дата | Дата выпуска | Направление | Код ТН ВЭД | ИНН отправителя | Наименование отправителя | Страна отправителя | ИНН контрактодержателя | Контрактодержатель | Страна контрактодержателя | ИНН декларанта | Страна декларанта | Изготовитель | Описание товара | Вес нетто | Стоимость в рублях | Курс валюты контракта | Дата курса валюты | Стоимость в валюте контракта | Стоимость в долларах США | Цена за кг (USD) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1123 | 2024-04-08 | 2024-04-08 | ИМ | 7202998000 | NaN | DKMT PLUS Ltd. | Израиль (IL) | NaN | NaN | NaN | 7449044528.00 | NaN | NINGXIA KETONG NEW MATERIAL TECHNOLOGY CO. LTD | Силикокальций sica (ферросиликокальций)- 60000... | 60000.00 | 10230395.85 | 92.42 | 2024-04-08 00:00:00 | 110700.00 | 110700.00 | 1.85 |
| 312 | 2024-01-16 | 2024-01-16 | ЭК | 7202998000 | 6704010359.00 | ООО "НПК ФЕРРОСПЕЦСПЛАВЫ" | NaN | NaN | NaN | NaN | 6704010359.00 | NaN | ООО НПК ФЕРРОСПЕЦСПЛАВЫ | Ферроникельхром марки фн20, является ферроспла... | 19992.00 | 1454859.34 | 87.68 | 2024-01-16 00:00:00 | 16593.36 | 16593.36 | 0.83 |
| 1956 | 2024-07-26 | 2024-07-26 | ЭК | 7202419000 | 6632001031.00 | АО "СЗФ | Россия (RU) | 6632001031.00 | АО "СЕРОВСКИЙ ЗАВОД ФЕРРОСПЛАВОВ" | Россия (RU) | 6632001031.00 | Россия (RU) | АО"СЗФ" | ФЕРРОХРОМ ВЫСОКОУГЛЕРОДИСТЫЙ, СОД.. C: 8.. 5%,... | 54000.00 | 5577689.80 | 85.41 | 2024-07-26 00:00:00 | 65304.88 | 65304.88 | 1.21 |
Замечание: После предварительного анализа данных двух таблиц, мы произвели фильтрацию данных (оставили тоьлко столбцы которые содержат необходимую информацию).
Однако, мы не обладаем полной информацией о природе данных. Некоторые столбцы содержат одинаковую или почти одинаковую информаци. Далее рассмотрим содержание таблиц подробнее и попробуем отбросить избыточную информацию.
df_eaeu.¶df_eaeu.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1275 entries, 0 to 1274 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Дата подачи статформы 1275 non-null object 1 Отчетный месяц перемещения товаров 1275 non-null object 2 ИМ/ЭК 1275 non-null object 3 ИНН отправителя 548 non-null float64 4 Наименование отправителя 1275 non-null object 5 Код страны отправителя 1275 non-null object 6 Код страны отправления 1275 non-null object 7 Код товара по ТН ВЭД ТС 1275 non-null int64 8 Наименование товара по ТН ВЭД ТС 1100 non-null object 9 Вес нетто кг 1275 non-null float64 10 Цена товара 1275 non-null float64 11 Статистическая стоимость руб 1275 non-null float64 12 Статистическая стоимость $ 1275 non-null float64 13 Код страны происхождения 1275 non-null object dtypes: float64(5), int64(1), object(8) memory usage: 139.6+ KB
Замечание: В задании нужно выяснить страны конкуренты Группы АО "ЧЭМК". В таблице df_eaeu есть 3 колонки с подходящими значениями: Код страны отправителя,Код страны отправления, Код страны происхождения.
Постараемся выяснить, где находятся более релевантные данные. Во всех столбцах значения заполнены польностью.
# Поиск количества строк с несовпадающими значениями
len(df_eaeu[df_eaeu['Код страны отправителя'] != df_eaeu['Код страны отправления']])
0
Замечание: Данные полностью совпадают от отдного столбца можно избавиться.
# Поиск количества строк с несовпадающими значениями
len(df_eaeu[df_eaeu['Код страны отправления'] != df_eaeu['Код страны происхождения']])
50
Замечание: Нашлось 50 строк.
# Вывод случайных строк с несовпадающими значениями
df_eaeu[df_eaeu['Код страны отправления'] != df_eaeu['Код страны происхождения']].sample(5)
| Дата подачи статформы | Отчетный месяц перемещения товаров | ИМ/ЭК | ИНН отправителя | Наименование отправителя | Код страны отправителя | Код страны отправления | Код товара по ТН ВЭД ТС | Наименование товара по ТН ВЭД ТС | Вес нетто кг | Цена товара | Статистическая стоимость руб | Статистическая стоимость $ | Код страны происхождения | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 965 | 25.06.2024 | 2024-06 | ЭК | 7453270174.00 | "ФЕРРОЭКСПОРТ УРАЛ" | RU - РОССИЯ | RU - РОССИЯ | 7202998000 | 'СИЛИКОКАЛЬЦИЙ СК30. | 1000.00 | 270000.00 | 270000.00 | 3032.97 | CN - КИТАЙ |
| 231 | 01.03.2024 | 2024-02 | ЭК | 9704145249.00 | ФОРИН ТРЕЙД | RU - РОССИЯ | RU - РОССИЯ | 7202190000 | 'ФЕРРОМАРГАНЕЦ ПРОЧИЙ. | 12000.00 | 2004000.00 | 2004000.00 | 21633.97 | IN - ИНДИЯ |
| 815 | 31.05.2024 | 2024-05 | ЭК | 5040147295.00 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ФЕРР... | RU - РОССИЯ | RU - РОССИЯ | 7202190000 | 'ФЕРРОМАРГАНЕЦ ПРОЧИЙ. | 20000.00 | 2200000.00 | 2200000.00 | 24525.49 | IN - ИНДИЯ |
| 869 | 07.06.2024 | 2024-06 | ЭК | 5040147295.00 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ФЕРР... | RU - РОССИЯ | RU - РОССИЯ | 7202190000 | 'ФЕРРОМАРГАНЕЦ ПРОЧИЙ. | 20000.00 | 2200000.00 | 2200000.00 | 24615.25 | IN - ИНДИЯ |
| 1050 | 08.07.2024 | 2024-06 | ЭК | 9704145249.00 | ФОРИН ТРЕЙД | RU - РОССИЯ | RU - РОССИЯ | 7202419000 | 'ФЕРРОХРОМ СОДЕРЖАЩИЙ БОЛЕЕ 6 МАС.% УГЛЕРОДА | 3000.00 | 555000.00 | 555000.00 | 6320.72 | IN - ИНДИЯ |
# Вывод компаний со строками с несовпадающими значениями
df_eaeu[df_eaeu['Код страны отправления'] != df_eaeu['Код страны происхождения']]['Наименование отправителя'].unique()
array(['ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ТОРГОВЫЙ ДОМ "ТМЗ"',
'ООО ТД"ТМЗ"', 'ФОРИН ТРЕЙД', 'ООО "ИТЭК"', 'ООО "ЕРГАРДА"',
'ООО "ДАЛОС"', 'ООО НПП ТЕХНОЛОГИЯ', 'КОНКОРД ФЕРРОЭЛОЙС',
'ООО "АВТОПИТЕР"',
'НОВЫЕ ПЕРСПЕКТИВНЫЕ ПРОДУКТЫ ТЕХНОЛОГИЯ (ООО НПП ТЕХНОЛОГИЯ)',
'ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "ФЕРРОЛАБС-ГРУПП"',
'"ФЕРРОЭКСПОРТ УРАЛ"', 'ООО «ФЕРРО-ЭКСПОРТ»'], dtype=object)
Замечание: После анализа из открытых источников (интернет) выяснилось, что данные компании зарегистрированы в России. Из этого сделаем предположение, что более точная информация находится в столбце Код страны отправления.
Примем решение, что далее будем работать именно с данным столбцом.
# Фильтрация столбцов исходной таблицы
df_eaeu = df_eaeu[['Дата подачи статформы',
'Отчетный месяц перемещения товаров',
'ИМ/ЭК',
'ИНН отправителя',
'Наименование отправителя',
'Код страны отправления',
'Код товара по ТН ВЭД ТС',
'Наименование товара по ТН ВЭД ТС',
'Вес нетто кг',
'Цена товара',
'Статистическая стоимость руб',
'Статистическая стоимость $']]
df_other.¶df_other.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 2357 entries, 0 to 2356 Data columns (total 21 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Дата 2357 non-null datetime64[ns] 1 Дата выпуска 2357 non-null datetime64[ns] 2 Направление 2357 non-null object 3 Код ТН ВЭД 2357 non-null int64 4 ИНН отправителя 1952 non-null float64 5 Наименование отправителя 2357 non-null object 6 Страна отправителя 1097 non-null object 7 ИНН контрактодержателя 1090 non-null float64 8 Контрактодержатель 1090 non-null object 9 Страна контрактодержателя 858 non-null object 10 ИНН декларанта 2352 non-null float64 11 Страна декларанта 858 non-null object 12 Изготовитель 2224 non-null object 13 Описание товара 2357 non-null object 14 Вес нетто 2357 non-null float64 15 Стоимость в рублях 2357 non-null float64 16 Курс валюты контракта 2357 non-null float64 17 Дата курса валюты 2357 non-null object 18 Стоимость в валюте контракта 2357 non-null float64 19 Стоимость в долларах США 2357 non-null float64 20 Цена за кг (USD) 2357 non-null float64 dtypes: datetime64[ns](2), float64(9), int64(1), object(9) memory usage: 386.8+ KB
Замечание: В задании нужно выяснить страны конкуренты Группы АО "ЧЭМК". В таблице df_other есть колонки с подходящими значениями: Отправитель,Контрактодержатель, Декларант.
Постараемся выяснить, где находятся более релевантные данные.
# Поиск количества строк с несовпадающими значениями без учета пропущенный значений
len(df_other[df_other['Страна контрактодержателя'].notna() &
df_other['Страна декларанта'].notna() &
(df_other['Страна контрактодержателя'] != df_other['Страна декларанта'])])
0
Замечание: Данные полностью совпадают от отдного столбца можно избавиться.
# Поиск количества строк с несовпадающими значениями без учета пропущенный значений
len(df_other[df_other['Страна контрактодержателя'].notna() &
df_other['Страна отправителя'].notna() &
(df_other['Страна контрактодержателя'] != df_other['Страна отправителя'])])
169
# Вывод случайных строк с несовпадающими значениями
df_other[df_other['Страна контрактодержателя'].notna() &
df_other['Страна отправителя'].notna() &
(df_other['Страна контрактодержателя'] != df_other['Страна отправителя'])].sample(3)
| Дата | Дата выпуска | Направление | Код ТН ВЭД | ИНН отправителя | Наименование отправителя | Страна отправителя | ИНН контрактодержателя | Контрактодержатель | Страна контрактодержателя | ИНН декларанта | Страна декларанта | Изготовитель | Описание товара | Вес нетто | Стоимость в рублях | Курс валюты контракта | Дата курса валюты | Стоимость в валюте контракта | Стоимость в долларах США | Цена за кг (USD) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2205 | 2024-08-12 | 2024-08-13 | ИМ | 7202419000 | NaN | ООО РУСЕЛОИС | Грузия (GE) | 7736660930.00 | ООО "СТМ-ГРУПП" | Россия (RU) | 7736660930.00 | Россия (RU) | ООО "РУСЕЛОИС" | ФЕРРОХРОМ ФХ850А (ФРАКЦИЯ 20-50 ММ), ХИМИЧЕСКИ... | 21564.00 | 3895152.80 | 0.00 | 2024-08-12 00:00:00 | 3859956.00 | 44267.12 | 2.05 |
| 1381 | 2024-05-16 | 2024-05-16 | ИМ | 7202930000 | NaN | KWAN TEE Limited | Турция (TR) | 7814809107.00 | ООО КС-ТЕХ ТД | Россия (RU) | 7814809107.00 | Россия (RU) | НЕ ИЗВЕСТЕН | ФЕРРОНИОБИЙ.. . | 18000.00 | 54907385.64 | 91.26 | 2024-05-16 00:00:00 | 601676.64 | 601676.64 | 33.43 |
| 1802 | 2024-07-01 | 2024-07-01 | ИМ | 7202210000 | NaN | NLMK TURKEY CELIK TICARET ANONIM SIRKETI. | Турция (TR) | 4823006703.00 | ПАО "НОВОЛИПЕЦКИЙ МЕТАЛЛУРГИЧЕСКИЙ КОМБИНАТ" | Россия (RU) | 4823006703.00 | Россия (RU) | NaN | ФЕРРОСИЛИЦИЙ ФС75-100 Т (РАЗМЕР ЧАСТИЦ 10-50ММ... | 100000.00 | 18217088.00 | 85.75 | 2024-07-01 00:00:00 | 212410.00 | 212449.13 | 2.12 |
Замечание: Далее, после анализа из открытых источников (интернет) выяснилось, что:
Контрактодержатель — это посредник между продавцом и покупателем в международных сделках,
Декларант — это человек, который работает с таможней во время перевоза товара через границу.
Таким образом, данные столбцы нас не интересуют, от них также избавимся.
# Фильтрация столбцов исходной таблицы
df_other = df_other[['Дата',
'Дата выпуска',
'Направление',
'Код ТН ВЭД',
'ИНН отправителя',
'Наименование отправителя',
'Страна отправителя',
'Изготовитель',
'Описание товара',
'Вес нетто',
'Стоимость в рублях',
'Курс валюты контракта',
'Дата курса валюты',
'Стоимость в валюте контракта',
'Стоимость в долларах США',
'Цена за кг (USD)']]
# Приведение колонок к формату целого числа
df_eaeu['ИНН отправителя'] = df_eaeu['ИНН отправителя'].astype('Int64')
df_other['ИНН отправителя'] = df_other['ИНН отправителя'].astype('Int64')
# Приведение колонок к формату даты и времени
df_eaeu['Дата подачи статформы'] = pd.to_datetime(df_eaeu['Дата подачи статформы'], format='%d.%m.%Y')
df_eaeu['Отчетный месяц перемещения товаров'] = pd.to_datetime(df_eaeu['Отчетный месяц перемещения товаров'], format='%Y-%m')
df_other['Дата'] = pd.to_datetime(df_other['Дата'], format='%d.%m.%Y')
df_other['Дата выпуска'] = pd.to_datetime(df_other['Дата выпуска'], format='%d.%m.%Y')
Замечание: Все типы данных преведены к необходимым.
Для соблюдения условий выполним фильтрацию исходных данных.
df_eaeu = df_eaeu[df_eaeu['Дата подачи статформы'] <= '2024-08-17']
df_other = df_other[df_other['Дата выпуска'] <= '2024-05-31']
Из открытых источников (интернет) и информации полученной от заказчика выяснилось, в к группе компании АО "ЧЭМК" принадлежат следующие предприятия: Челябинский электрометаллургический комбинат, Кузнецкие ферросплавы, Серовский завод ферросплавов, Юргинский завод ферросплавов(филиал компанииКузнецкие ферросплавы).
df_eaeu_exp = df_eaeu[df_eaeu['ИМ/ЭК'] == 'ЭК']
df_other_exp = df_other[df_other['Направление'] == 'ЭК']
df_other_exp.¶# Поиск уникальных записей в столбце
df_other_exp[df_other_exp['Изготовитель'].notna()]['Изготовитель'].str.lower().unique()
array(['ооо "бзф"', 'акционерное общество "кузнецкие ферросплавы"',
'ао "чэмк"', 'пао "стахановский завод ферросплавов"',
'ооо "металекс"', 'ао "ключевский завод ферросплавов"',
'горизонт-м россия', 'ооо "нордик титан"', 'ооо "альянс"',
'ооо "тиволга"', 'горизонт-м россия инн 4007020268',
'ооо нпк ферроспецсплавы',
'ооо "серовский завод малой металлургии"', 'ооо "метсплав"',
'ао "счпз"', 'филиал № 7 "сзф" ооо "югмк"', 'ао "сзф"', 'ао"сзф"',
'ооо"тфз"', 'ооо волговятсквторцветмет',
'ооо вмз "северный ниобий"',
'ао "чусовской металлургический завод"', 'ао "евраз ванадий тула"',
'ооо "фенимор транс"', 'ооо "уралспецсплав"',
'горизонт-м россия инн 4007020268', 'ооо "феррометснаб"',
'anyang tiefa metallurgy co.ltd',
'пао "ключевский завод ферросплавов"',
'ао "чепецкий механический завод"',
'пао "корпорация всмпо-ависма"', 'ооо "уральские ферросплавы"',
'нпп технология', 'ао "чэмк" г.челябинск', 'ооо "промсырье"',
'ао чмз.'], dtype=object)
# Поиск подходящих записей
names = ['челяб',
'чэмк',
'электромет',
'кузнец',
'серов',
'юрг',
'югмк'
]
res = set()
for comp in df_other_exp[df_other_exp['Изготовитель'].notna()]['Изготовитель'].str.lower().unique():
for name in names:
if name in comp:
res.add(comp)
res
{'акционерное общество "кузнецкие ферросплавы"',
'ао "чэмк"',
'ао "чэмк" г.челябинск',
'ооо "серовский завод малой металлургии"',
'филиал № 7 "сзф" ооо "югмк"'}
Замечание: Удалось найти подходящие названия предприятий.
Далее попробуем проверить записи с пропущенными значениями в столбце Изготовитель.
# Поиск ИНН отправителя для предприятий группы ЧЭМК
inn = df_other_exp[df_other_exp['Изготовитель'].str.lower().isin(res)]['ИНН отправителя'].unique().tolist()
inn = inn[:4] + inn[-1:]
inn
[4216001565, 7447010227, 6632017987, 7802888337, 7450052555]
# Поиск записей в графе 'Наименование отправителя' для найденных ИНН
df_other_exp[df_other_exp['Изготовитель'].isna()
& df_other_exp['ИНН отправителя'].isin(inn)]['Наименование отправителя'].unique().tolist()
[]
Замечание: С помощью логики и интернета удалось выяснить, что данная аббревиатура нам подходит ("АО Кузнецкие ферросплавы").
В итоге удалось найти подходящие нам записи с ИНН: 4216001565, 7447010227, 6632017987, 7450052555 и названиями: акционерное общество "кузнецкие ферросплавы", ао "чэмк", ао "чэмк" г.челябинск , ооо "серовский завод малой металлургии", филиал № 7 "сзф" ооо "югмк".
# Фильтр данных для группы ЧЭМК
df_other_exp_chemk = df_other_exp[df_other_exp['Наименование отправителя'].isin(['АО "КФ'])
| df_other_exp['Изготовитель'].str.lower().isin(res)
| df_other_exp['ИНН отправителя'].isin(inn)]
# Заполнение пропусков по значениям из другого столбца
df_other_exp_chemk['Изготовитель'] = (df_other_exp_chemk['Изготовитель']
.fillna(df_other_exp_chemk[df_other_exp_chemk['Изготовитель'].isna()]
['Наименование отправителя']))
df_other_exp_chemk['Страна отправителя'] = df_other_exp_chemk['Страна отправителя'].fillna('Россия (RU)')
# Замена значений в таблице для единообразия
df_other_exp_chemk['Изготовитель'] = df_other_exp_chemk['Изготовитель'].replace(['АО "ЧЭМК" Г.ЧЕЛЯБИНСК',
'АКЦИОНЕРНОЕ ОБЩЕСТВО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ"',
'АО "КФ',
'ФИЛИАЛ № 7 "СЗФ" ООО "ЮГМК"'],
['АО "ЧЭМК"',
'АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ"',
'АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ"',
'ООО "ЮГМК"'])
df_other_exp_chemk = df_other_exp_chemk[df_other_exp_chemk['Изготовитель'] != 'ПАО "СТАХАНОВСКИЙ ЗАВОД ФЕРРОСПЛАВОВ"']
df_other_exp_chemk['Изготовитель'].unique()
array(['АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ"', 'АО "ЧЭМК"',
'ООО "СЕРОВСКИЙ ЗАВОД МАЛОЙ МЕТАЛЛУРГИИ"', 'ООО "ЮГМК"'],
dtype=object)
# Проверка комбинаций записи в столбцах
df_other_exp_chemk.groupby(['Наименование отправителя',
'Изготовитель',
'ИНН отправителя'])['Дата'].count()
Наименование отправителя Изготовитель ИНН отправителя АО "КФ АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" 4216001565 62 АО "КФ" АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" 4216001565 351 АО "ЧЭМК АО "ЧЭМК" 7447010227 3 АО "ЧЭМК" АО "ЧЭМК" 7447010227 41 АО"ЧЭМК" АО "ЧЭМК" 7447010227 1 ООО "СЗММ ООО "СЕРОВСКИЙ ЗАВОД МАЛОЙ МЕТАЛЛУРГИИ" 6632017987 8 ООО "СЗММ" ООО "СЕРОВСКИЙ ЗАВОД МАЛОЙ МЕТАЛЛУРГИИ" 6632017987 16 ООО "СОЮЗМЕТАЛЛСЕРВИС ООО "ЮГМК" 7802888337 6 ООО "СОЮЗМЕТАЛЛСЕРВИС" ООО "ЮГМК" 7802888337 11 ООО "ФЕРРОЭКСПОРТ АО "ЧЭМК" 7450052555 1 Name: Дата, dtype: int64
df_other_exp_chemk.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 504 entries, 9 to 1359 Data columns (total 16 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Дата 504 non-null datetime64[ns] 1 Дата выпуска 504 non-null datetime64[ns] 2 Направление 504 non-null object 3 Код ТН ВЭД 504 non-null int64 4 ИНН отправителя 500 non-null Int64 5 Наименование отправителя 504 non-null object 6 Страна отправителя 504 non-null object 7 Изготовитель 504 non-null object 8 Описание товара 504 non-null object 9 Вес нетто 504 non-null float64 10 Стоимость в рублях 504 non-null float64 11 Курс валюты контракта 504 non-null float64 12 Дата курса валюты 504 non-null object 13 Стоимость в валюте контракта 504 non-null float64 14 Стоимость в долларах США 504 non-null float64 15 Цена за кг (USD) 504 non-null float64 dtypes: Int64(1), datetime64[ns](2), float64(6), int64(1), object(6) memory usage: 67.4+ KB
Замечание: Все записи в столбцах соответствуют друг другу. Получилось 504 строки.
df_eaeu_exp.¶# Поиск подходящих записей
names = ['челяб',
'чэмк',
'электромет',
'кузнец',
'серов',
'юрг',
' кф',
'югмк'
]
result = set()
for comp in df_eaeu_exp[df_eaeu_exp['Наименование отправителя'].notna()]['Наименование отправителя'].str.lower().unique():
for name in names:
if name in comp:
result.add(comp)
result
{'ао "чэмк"'}
Замечание: Удалось найти одно предприятие.
# Фильтр данных для группы ЧЭМК
df_eaeu_exp_chemk = df_eaeu_exp[df_eaeu_exp['Наименование отправителя'].str.lower().isin(result)]
df_eaeu_exp_chemk['Наименование отправителя'].unique()
array(['АО "ЧЭМК"'], dtype=object)
# Проверка комбинаций записи в столбцах
df_eaeu_exp_chemk.groupby(['ИНН отправителя',
'Наименование отправителя'])['Дата подачи статформы'].count()
ИНН отправителя Наименование отправителя 7447010227 АО "ЧЭМК" 22 Name: Дата подачи статформы, dtype: int64
df_eaeu_exp_chemk.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 22 entries, 41 to 1193 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Дата подачи статформы 22 non-null datetime64[ns] 1 Отчетный месяц перемещения товаров 22 non-null datetime64[ns] 2 ИМ/ЭК 22 non-null object 3 ИНН отправителя 22 non-null Int64 4 Наименование отправителя 22 non-null object 5 Код страны отправления 22 non-null object 6 Код товара по ТН ВЭД ТС 22 non-null int64 7 Наименование товара по ТН ВЭД ТС 19 non-null object 8 Вес нетто кг 22 non-null float64 9 Цена товара 22 non-null float64 10 Статистическая стоимость руб 22 non-null float64 11 Статистическая стоимость $ 22 non-null float64 dtypes: Int64(1), datetime64[ns](2), float64(4), int64(1), object(4) memory usage: 2.3+ KB
Замечание: Все записи в столбцах соответствуют друг другу. Получилось 22 строки.
# Выбор необходимых столбцов
df1 = df_eaeu_exp_chemk[['Дата подачи статформы',
'Наименование отправителя',
'Код товара по ТН ВЭД ТС',
'Наименование товара по ТН ВЭД ТС',
'Вес нетто кг',
'Цена товара']]
df2 = df_other_exp_chemk[['Дата выпуска',
'Изготовитель',
'Код ТН ВЭД',
'Описание товара',
'Вес нетто',
'Стоимость в рублях']]
# Создание столбца ссылающегося на источник данных
df1['Направление экспорта'] = 'Страны ЕАЭС'
df2['Направление экспорта'] = 'Остальные страны'
# Приведение названия колонок к общему виду
df1.columns = df2.columns
# Объединение таблиц
df_chemk = pd.concat([df1, df2])
# Рассчет цены товаров
df_chemk['Цена товара'] = df_chemk['Стоимость в рублях'] / df_chemk['Вес нетто']
# Вывод выборки табличных данных
df_chemk.sample(5)
| Дата выпуска | Изготовитель | Код ТН ВЭД | Описание товара | Вес нетто | Стоимость в рублях | Направление экспорта | Цена товара | |
|---|---|---|---|---|---|---|---|---|
| 218 | 2024-01-30 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202210000 | Ферросилиций фс 75(si-76,4%) фр.. 50-100 мм го... | 50000.00 | 6060720.28 | Остальные страны | 121.21 |
| 510 | 2024-02-24 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202210000 | Ферросилиций фс75(si-75,8%) фр.10-50 мм гост 1... | 27520.00 | 3427879.54 | Остальные страны | 124.56 |
| 219 | 2024-01-31 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202210000 | Ферpосилиций фс 75(si-76,3%) фр.. 10-50 мм гос... | 108000.00 | 13048478.99 | Остальные страны | 120.82 |
| 78 | 2024-01-12 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202210000 | Ферросилиций фс75(si-76,4%) фр.10-50 мм гост 1... | 50000.00 | 6095868.04 | Остальные страны | 121.92 |
| 169 | 2024-01-26 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202210000 | Ферросилиций фс 75(si-76,3%) фр.. 10-50 мм гос... | 23000.00 | 2774489.00 | Остальные страны | 120.63 |
Замечание: Здесь на основе данных и порядков чисел предположили способ рассчета цены товаров.
Также приняли столбцы Дата подачи статформы и Дата выпуска за даты продажи товаров.
Имеем ввиду, что также можно проверить рассчеты пересчетом цен и стоимостей в $ на основе курсов на даты рассчетов. Порядок цен должен быть примерно таким же.
кодов товарной номенклатуры ВЭД производимой всеми предприятиями Группы АО "ЧЭМК".¶# Вывод уникальных значений столбца 'Код ТН ВЭД'
pd.Series(df_chemk['Код ТН ВЭД'].unique().tolist())
0 7202300000 1 7202118000 2 7202419000 3 7202299000 4 7202210000 5 7202998000 6 7202495000 7 7202499000 8 7202910000 dtype: int64
# Подсчет числа уникальных значений столбца 'Описание товара'
len(pd.Series(df_chemk['Описание товара'].unique().tolist()))
488
Замечание: Заметим, что описание товаров с одинаковым кодом различается (488 способов записи 9 кодов ВЭД).
Также выведем коды ВЭД для каждого предприятия.
# Группировка кодов ВЭД по столбцу Изготовитель
df_chemk.groupby('Изготовитель')['Код ТН ВЭД'].apply(list).explode().reset_index().drop_duplicates()
| Изготовитель | Код ТН ВЭД | |
|---|---|---|
| 0 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202210000 |
| 177 | АО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | 7202299000 |
| 417 | АО "ЧЭМК" | 7202300000 |
| 419 | АО "ЧЭМК" | 7202118000 |
| 430 | АО "ЧЭМК" | 7202419000 |
| 436 | АО "ЧЭМК" | 7202299000 |
| 439 | АО "ЧЭМК" | 7202210000 |
| 467 | АО "ЧЭМК" | 7202495000 |
| 479 | АО "ЧЭМК" | 7202499000 |
| 485 | ООО "СЕРОВСКИЙ ЗАВОД МАЛОЙ МЕТАЛЛУРГИИ" | 7202998000 |
| 489 | ООО "СЕРОВСКИЙ ЗАВОД МАЛОЙ МЕТАЛЛУРГИИ" | 7202910000 |
| 509 | ООО "ЮГМК" | 7202210000 |
Замечание: Заметим, что все предприятия выпускают различную продукцию (без дублирования). ЮГМК - филиал ООО "СЕРОВСКИЙ ЗАВОД МАЛОЙ МЕТАЛЛУРГИИ".
df_chemk.groupby('Направление экспорта')['Код ТН ВЭД'].apply(list).explode().drop_duplicates().to_frame()
| Код ТН ВЭД | |
|---|---|
| Направление экспорта | |
| Остальные страны | 7202210000 |
| Остальные страны | 7202299000 |
| Остальные страны | 7202300000 |
| Остальные страны | 7202998000 |
| Остальные страны | 7202118000 |
| Остальные страны | 7202495000 |
| Остальные страны | 7202499000 |
| Остальные страны | 7202910000 |
| Страны ЕАЭС | 7202419000 |
# Создание столбцов с информацией по месяцам
df_chemk['Месяц'] = df_chemk['Дата выпуска'].dt.month_name()
df_chemk['Номер месяца'] = df_chemk['Дата выпуска'].dt.month
# Группировка данных
df_res = df_chemk.groupby(['Направление экспорта',
'Месяц',
'Номер месяца'])['Вес нетто'].sum().reset_index().pivot(index=['Номер месяца',
'Месяц'],
columns='Направление экспорта',
values='Вес нетто')
# Переименование столбцов
df_res.columns = ['Остальные страны', 'Страны ЕАЭС']
# Заполнение пропусков "нулями"
df_res = df_res.fillna(0)
# Рассчет долевых значений
df_res['Доля остальных стран в %'] = df_res['Остальные страны'] / (df_res['Остальные страны'] + df_res['Страны ЕАЭС']) * 100
df_res['Доля стран ЕАЭС в %'] = df_res['Страны ЕАЭС'] / (df_res['Остальные страны'] + df_res['Страны ЕАЭС']) * 100
df_res
| Остальные страны | Страны ЕАЭС | Доля остальных стран в % | Доля стран ЕАЭС в % | ||
|---|---|---|---|---|---|
| Номер месяца | Месяц | ||||
| 1 | January | 17359928.00 | 0.00 | 100.00 | 0.00 |
| 2 | February | 20368976.00 | 2402100.00 | 89.45 | 10.55 |
| 3 | March | 1216196.00 | 2529600.00 | 32.47 | 67.53 |
| 4 | April | 1574999.00 | 1519800.00 | 50.89 | 49.11 |
| 5 | May | 14360250.00 | 2228700.00 | 86.57 | 13.43 |
| 6 | June | 0.00 | 2733600.00 | 0.00 | 100.00 |
| 7 | July | 0.00 | 3399100.00 | 0.00 | 100.00 |
| 8 | August | 0.00 | 3290750.00 | 0.00 | 100.00 |
# Группировка данных
df_forecast = df_chemk.groupby(['Изготовитель',
'Дата выпуска'])['Вес нетто'].sum().reset_index().pivot(index='Дата выпуска',
columns='Изготовитель',
values='Вес нетто').fillna(0)
# Переименование столбцов
df_forecast.columns = ['КУЗН', 'ЧМЭК', 'СЕРОВ', 'ЮГМК']
# Ресэмплирование данных
df_forecast_1M = df_forecast.resample('1M').sum()
df_forecast_10D = df_forecast.resample('10D').sum()
df_forecast_1M
| КУЗН | ЧМЭК | СЕРОВ | ЮГМК | |
|---|---|---|---|---|
| Дата выпуска | ||||
| 2024-01-31 | 14914570.00 | 2296410.00 | 148948.00 | 0.00 |
| 2024-02-29 | 13539940.00 | 8429440.00 | 148716.00 | 652980.00 |
| 2024-03-31 | 0.00 | 2529600.00 | 237276.00 | 978920.00 |
| 2024-04-30 | 0.00 | 1540200.00 | 263359.00 | 1291240.00 |
| 2024-05-31 | 12184000.00 | 2276950.00 | 180180.00 | 1947820.00 |
| 2024-06-30 | 0.00 | 2733600.00 | 0.00 | 0.00 |
| 2024-07-31 | 0.00 | 3399100.00 | 0.00 | 0.00 |
| 2024-08-31 | 0.00 | 3290750.00 | 0.00 | 0.00 |
Замечание: Мы собрали данные для работы. Попробуем построить прогноз опираясь на месячные данные компаний, а также на данные сэмплированные по 10 дней (возможно точность прогноза повысится).
# Построение интерактивного графика с данными за месяц
fig = px.line(data_frame = df_forecast_1M.reset_index(),
x='Дата выпуска',
y=df_forecast_1M.columns,
title='Вес',
width=900,
height=500)
fig.update_xaxes(rangeslider_visible=True)
fig.show()
# Построение интерактивного графика с данными по 10 дней
fig = px.line(data_frame = df_forecast_10D.reset_index(),
x='Дата выпуска',
y=df_forecast_10D.columns,
title='Вес',
width=900,
height=500)
fig.update_xaxes(rangeslider_visible=True)
fig.show()
Замечание: Наблюдаются значительные колебания в объемах экспорта, что может затруднить создание стабильной модели прогнозирования. Для анализа сезонности или тренда нам недостаточно данных.
# Суммирование объемов экспорта
df_forecast_1M['Общие'] = (df_forecast_1M[df_forecast_1M.columns[0]]
+ df_forecast_1M[df_forecast_1M.columns[1]]
+ df_forecast_1M[df_forecast_1M.columns[2]]
+ df_forecast_1M[df_forecast_1M.columns[3]])
# Визуализация данных
data = df_forecast_1M['Общие'].reset_index()
data['Месяц'] = data['Дата выпуска'].dt.month
# Построение точечного графика с регрессионной линией
sns.regplot(data=data, x='Месяц', y='Общие')
plt.title('Объемы экспорта с линией регрессии')
plt.xlabel('Номер месяца')
plt.ylabel('Вес');
Замечание: Мы видим как сильно данные разбросаны. Также на рисунке изображена линия регрессии, которая стремится к 0. Чтобы построить модель нам понадобиться создать дополнительные признаки. Иначе модель будет предсказывать отрицательные значения.
# Создаем DataFrame для будущих месяцев
future_dates = pd.date_range(start='2024-09-30', end='2024-12-31', freq='M')
future_data_1 = pd.DataFrame(index=future_dates)
# Добавляем будующие месяцы
df_forecast_1M = pd.concat([df_forecast_1M, future_data_1])
# Рассчёт "скользящего среднего" и "лага"
for col in df_forecast_1M.columns:
df_forecast_1M[f'{col}_rolling_mean_3'] = df_forecast_1M[col].rolling(5).mean()
df_forecast_1M[f'{col}_rolling_mean_4'] = df_forecast_1M[col].rolling(8).mean()
df_forecast_1M[f'{col}_rolling_mean_5'] = df_forecast_1M[col].rolling(10).mean()
df_forecast_1M[f'{col}_lag_1'] = df_forecast_1M[col].shift(4)
df_forecast_1M[f'{col}_lag_2'] = df_forecast_1M[col].shift(5)
df_forecast_1M[f'{col}_lag_3'] = df_forecast_1M[col].shift(6)
df_forecast_1M[f'{col}_lag_4'] = df_forecast_1M[col].shift(7)
df_forecast_1M.fillna(0, inplace=True)
Замечание: Мы добавили дополнительные признаки необходимые для обучения модели.
# Подготовка данных для обучения
train_1M = df_forecast_1M[:6]
test_1M = df_forecast_1M[6:8]
print('Обучающая выборка')
print(train_1M.shape)
print('Start:', train_1M.index.min(), '---- End:', train_1M.index.max())
print('----------------------------------------------------------')
print('Тестовая выборка')
print(test_1M.shape)
print('Start:',test_1M.index.min(), '---- End:', test_1M.index.max())
print('----------------------------------------------------------')
target_train = train_1M['Общие']
target_test = test_1M['Общие']
features_train = train_1M.drop('Общие', axis=1)
features_test = test_1M.drop('Общие', axis=1)
print('Целевой признак')
print(target_train.shape, target_test.shape)
print('Признаки')
print(features_train.shape, features_test.shape)
Обучающая выборка (6, 40) Start: 2024-01-31 00:00:00 ---- End: 2024-06-30 00:00:00 ---------------------------------------------------------- Тестовая выборка (2, 40) Start: 2024-07-31 00:00:00 ---- End: 2024-08-31 00:00:00 ---------------------------------------------------------- Целевой признак (6,) (2,) Признаки (6, 39) (2, 39)
# Инициализация модели
model = LinearRegression()
# Обучение модели на тренировочных данных с кроссвалидацией TimeSeriesSplit
result = cross_val_score(model,
features_train,
target_train,
cv=TimeSeriesSplit(n_splits=3),
n_jobs=-1,
scoring='neg_root_mean_squared_error').mean()
RMSE_LR = abs(result)
print('RMSE на тренировочной выборке:', RMSE_LR)
model.fit(pd.concat([features_train, features_test]), pd.concat([target_train, target_test]))
res = model.predict(df_forecast_1M[8:].drop('Общие', axis=1))
df_forecast_1M['Общие'][-4:] = res
RMSE на тренировочной выборке: 191692.22563849157
Замечание: Мы использовали простую модель линейной регрессии. Погрешность ее предсказания составляет 190 тыс кг. Она дает грубые оценки.
df_forecast_1M['Общие'].to_frame()
| Общие | |
|---|---|
| 2024-01-31 | 17359928.00 |
| 2024-02-29 | 22771076.00 |
| 2024-03-31 | 3745796.00 |
| 2024-04-30 | 3094799.00 |
| 2024-05-31 | 16588950.00 |
| 2024-06-30 | 2733600.00 |
| 2024-07-31 | 3399100.00 |
| 2024-08-31 | 3290750.00 |
| 2024-09-30 | 52933.79 |
| 2024-10-31 | 100793.35 |
| 2024-11-30 | 105818.25 |
| 2024-12-31 | 112837.90 |
Замечание: Добавили результат предсказания в таблицу. по крайней мере нам удалось предсказать положительные значения. Как мы помним регрессионная прямая стремилась к 0 и мы ожидали отрицательные значения.
# Визуализация данных
data = df_forecast_1M['Общие'].reset_index()
data['Месяц'] = data['index'].dt.month
# Построение точечного графика с регрессионной линией
sns.regplot(data=data, x='Месяц', y='Общие')
plt.title('Объемы экспорта с линией регрессии')
plt.xlabel('Номер месяца')
plt.ylabel('Вес');
Замечание: Значения получились очень низкими, хотя они и соответствую направлению "регрессии".
Обладая большими данными, можно провести основательный анализ временного ряда, а также использовать более продвинутые модели предсказания. Ниже ссылка на проект с примерным планом анализа данных временных рядов.
Достаточность данных:
Данные охватывают только 8 месяцев 2024 года, что является относительно коротким периодом для построения надежных прогнозов.
Для более точного прогнозирования желательно иметь данные за несколько лет, чтобы учесть сезонные колебания и долгосрочные тренды.
Качество данных:
В данных присутствуют нулевые значения для rolling_mean и lag в начале периода. Это может исказить прогноз, так как модель может не учитывать начальные условия.
Если нулевые значения являются пропущенными данными, это может повлиять на точность прогноза.
Рекомендации: Для повышения точности прогноза рекомендуется собрать больше данных, включая предыдущие годы. Использовать более сложные методы прогнозирования (например, ARIMA), если данные демонстрируют сезонность или нелинейные тренды.
Итог: Прогнозы, основанные на текущих данных, могут быть полезны для краткосрочного планирования, но их точность ограничена из-за недостатка данных. Для повышения надежности прогнозов необходимо собрать больше данных и использовать более сложные методы анализа.
# Группировка данных
df_res = df_chemk.groupby(['Номер месяца', 'Месяц','Код ТН ВЭД'
])['Вес нетто'].sum().reset_index().pivot(index=['Номер месяца',
'Месяц'],
columns='Код ТН ВЭД',
values='Вес нетто').fillna(0)
# Построение интерактивного графика с данными за месяц
fig = px.line(data_frame = df_res.reset_index(),
x='Номер месяца',
y=df_res.columns,
title='Вес',
width=900,
height=500)
fig.update_xaxes(rangeslider_visible=True)
fig.show()
df_res
| Код ТН ВЭД | 7202118000 | 7202210000 | 7202299000 | 7202300000 | 7202419000 | 7202495000 | 7202499000 | 7202910000 | 7202998000 | |
|---|---|---|---|---|---|---|---|---|---|---|
| Номер месяца | Месяц | |||||||||
| 1 | January | 0.00 | 15167570.00 | 49950.00 | 1993460.00 | 0.00 | 0.00 | 0.00 | 0.00 | 148948.00 |
| 2 | February | 171700.00 | 13488920.00 | 729000.00 | 6426040.00 | 0.00 | 1584980.00 | 221720.00 | 0.00 | 148716.00 |
| 3 | March | 0.00 | 978920.00 | 0.00 | 2529600.00 | 0.00 | 0.00 | 0.00 | 40080.00 | 197196.00 |
| 4 | April | 153000.00 | 1291240.00 | 0.00 | 1387200.00 | 0.00 | 0.00 | 0.00 | 115312.00 | 148047.00 |
| 5 | May | 30600.00 | 14162870.00 | 7000.00 | 2208300.00 | 0.00 | 0.00 | 0.00 | 180180.00 | 0.00 |
| 6 | June | 142800.00 | 0.00 | 0.00 | 2590800.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| 7 | July | 448800.00 | 0.00 | 0.00 | 2930800.00 | 19500.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| 8 | August | 265200.00 | 0.00 | 60750.00 | 2964800.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
Замечание: На интерактивном графике видно как меняется структура экспортных поставок по месяцам.
Наведя курсор можно увидеть конкретное значение экспорта товара. также можно выбирать интересуемые товары и менять масштаб отображения.
Например, самый стабильно отгружаемый товар - 7202300000, а максимальные месячные отгрузки были у товара 7202210000.
Также можно в дальнейшем проанализировать страны в которые поставляется продукция.
Возможные причины колебаний:
# Группировка данных
df_res = df_chemk.groupby(['Номер месяца',
'Месяц',
'Код ТН ВЭД'])['Цена товара'].mean().reset_index().pivot(index=['Номер месяца',
'Месяц'],
columns=['Код ТН ВЭД'],
values='Цена товара')
df_res
| Код ТН ВЭД | 7202118000 | 7202210000 | 7202299000 | 7202300000 | 7202419000 | 7202495000 | 7202499000 | 7202910000 | 7202998000 | |
|---|---|---|---|---|---|---|---|---|---|---|
| Номер месяца | Месяц | |||||||||
| 1 | January | NaN | 120.69 | 86.83 | 89.31 | NaN | NaN | NaN | NaN | 119.69 |
| 2 | February | 84.79 | 121.29 | 75.06 | 87.10 | NaN | 254.80 | 256.44 | NaN | 123.67 |
| 3 | March | NaN | 73.04 | NaN | 0.89 | NaN | NaN | NaN | 334.59 | 124.58 |
| 4 | April | 68.82 | 76.49 | NaN | 0.99 | NaN | NaN | NaN | 298.37 | 126.53 |
| 5 | May | 65.45 | 97.19 | 104.44 | 63.32 | NaN | NaN | NaN | 308.20 | NaN |
| 6 | June | 40.24 | NaN | NaN | 1.04 | NaN | NaN | NaN | NaN | NaN |
| 7 | July | 1.42 | NaN | NaN | 1.14 | 213.12 | NaN | NaN | NaN | NaN |
| 8 | August | 1.43 | NaN | 78.85 | 1.20 | NaN | NaN | NaN | NaN | NaN |
Анализ изменения экспортных цен.
Не будем рассматривать аномально низкие цены (возможно есть ошибки в данных или в рассчетах).
Изменение цен по кодам ТН ВЭД:
Ферросилиций (7202210000): Цены снизились с 120.69 руб. в январе до 97.19 руб. в мае. Ферросиликомарганец (7202300000): Цены упали с 89.31 руб. в январе до 63.32 руб. в мае. Феррохром (7202910000): В мае цена составила 308.20 руб., что значительно выше, чем на другие товары.
Общий тренд:
Наблюдается снижение цен на большинство товаров. Некоторые товары (например, феррохром) демонстрируют стабильно высокие цены, что может быть связано с их уникальными свойствами или высоким спросом.
Снижение спроса: Возможно, снижение цен связано с уменьшением спроса на ферросплавы на международных рынках. Например, если основные потребители (металлургические компании) сократили производство.
Изменение курса рубля: Укрепление рубля может сделать российский экспорт менее конкурентоспособным, что вынуждает производителей снижать цены.
Конкуренция: Появление новых производителей или увеличение предложения со стороны других стран может привести к снижению цен.
Сезонные факторы: В мае–июле могли сказаться сезонные колебания спроса, особенно если основными потребителями являются отрасли с сезонной активностью (например, строительство).
Изменение себестоимости: Снижение затрат на производство (например, из-за снижения цен на сырье или энергоносители) могло позволить производителям снизить экспортные цены.
Специфика товаров: Некоторые товары (например, феррохром) имеют более высокую добавленную стоимость или уникальные свойства, что позволяет поддерживать высокие цены даже в условиях общего снижения.
Для составления полной картины экспорта Группы АО "ЧЭМК" важно проанализировать не только цены, но и другие ключевые метрики, которые помогут понять структуру, динамику и эффективность экспортной деятельности. Вот список важных метрик, которые стоит рассмотреть:
1. Выручка от экспорта.
Стоимость в рублях. Показывает финансовую эффективность экспорта.
Рассчитать общую выручку по месяцам, товарам и направлениям.
Сравнить выручку с объемом отгрузок для оценки рентабельности.
2. Рентабельность экспорта.
Отношение выручки к затратам на производство и логистику. Показывает, насколько прибылен экспорт.
Рассчитать рентабельность для каждого товара и направления.
Сравнить рентабельность по месяцам.
3. Концентрация экспорта.
Доля крупнейших товаров или направлений в общем экспорте. Показывает, насколько экспорт зависит от небольшого числа товаров или рынков.
Рассчитать долю топ-3 товаров в общем объеме экспорта.
Оценить риски, связанные с концентрацией.
4. География экспорта.
Распределение экспорта по странам или регионам.Позволяет оценить диверсификацию рынков сбыта.
Построить карту или диаграмму распределения экспорта по странам.
Выявить ключевые рынки и их динамику.
5. Эффективность логистики.
Затраты на логистику в расчете на единицу товара. Позволяет оценить, насколько эффективно организована доставка.
Сравнить затраты на логистику для разных направлений.
Оценить влияние логистики на конечную цену товара.
6. Внешние факторы.
Курс рубля, цены на сырье, таможенные пошлины. Позволяет понять, как внешние условия влияют на экспорт.
Сравнить динамику цен на экспорт с курсом рубля.
Оценить влияние изменения таможенных пошлин на объемы экспорта.
# Выбор необходимых столбцов
df1 = df_eaeu_exp[['Дата подачи статформы',
'Наименование отправителя',
'Код товара по ТН ВЭД ТС',
'Наименование товара по ТН ВЭД ТС',
'Вес нетто кг',
'Цена товара',
'Код страны отправления']]
df2 = df_other_exp[['Дата выпуска',
'Изготовитель',
'Код ТН ВЭД',
'Описание товара',
'Вес нетто',
'Стоимость в рублях',
'Страна отправителя']]
# Заполнение пропусков
df2['Страна отправителя'] = df2['Страна отправителя'].fillna('RU - РОССИЯ')
# Создание столбца ссылающегося на источник данных
df1['Направление экспорта'] = 'Страны ЕАЭС'
df2['Направление экспорта'] = 'Остальные страны'
# Приведение названия колонок к общему виду
df1.columns = df2.columns
# Объединение таблиц
df_all = pd.concat([df1, df2])
# Рассчет цены товаров
df_all['Цена товара'] = df_all['Стоимость в рублях'] / df_all['Вес нетто']
# Таблица с общим объемом экспорта по компаниям
df_all.groupby(['Изготовитель',
'Страна отправителя'])['Вес нетто'].sum().to_frame().sort_values('Вес нетто',
ascending=False).head(10)
| Вес нетто | ||
|---|---|---|
| Изготовитель | Страна отправителя | |
| ООО"ТФЗ" | Россия (RU) | 42076714.00 |
| АКЦИОНЕРНОЕ ОБЩЕСТВО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | RU - РОССИЯ | 28454510.00 |
| АО "ЧЭМК" | RU - РОССИЯ | 26447800.00 |
| ООО "БЗФ" | RU - РОССИЯ | 18873866.00 |
| АКЦИОНЕРНОЕ ОБЩЕСТВО "КУЗНЕЦКИЕ ФЕРРОСПЛАВЫ" | Россия (RU) | 12184000.00 |
| АО"СЗФ" | RU - РОССИЯ | 4094370.00 |
| ФИЛИАЛ № 7 "СЗФ" ООО "ЮГМК" | RU - РОССИЯ | 2923140.00 |
| ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "МЕТАЛЛИЧЕСКИЕ ПОРОШКИ ЮГ" | RU - РОССИЯ | 2388000.00 |
| ООО НПК ФЕРРОСПЕЦСПЛАВЫ | RU - РОССИЯ | 2353549.00 |
| ООО"ТФЗ" | RU - РОССИЯ | 1991668.00 |
Замечание: Мы обладаем данными по экспорту только для компаний из России. В данных есть также иностранные компании, но с информацией по импорту.
В таблице видны основные конкуренты по общему объему экспорта.
Главные конкуренты: ООО"ТФЗ" и ООО "БЗФ".
# Таблица с объемами экспорта товаров по компаниям
export_volume = df_all.groupby(['Код ТН ВЭД',
'Изготовитель',
'Страна отправителя'])['Вес нетто'].sum().to_frame().sort_values('Вес нетто').reset_index()
# Сравнение объемов экспорта конкретной продукции
export_volume[export_volume['Код ТН ВЭД']==7202300000]
| Код ТН ВЭД | Изготовитель | Страна отправителя | Вес нетто | |
|---|---|---|---|---|
| 8 | 7202300000 | ООО "АВТОПИТЕР" | RU - РОССИЯ | 15.40 |
| 73 | 7202300000 | ООО «ФЕРРО-ЭКСПОРТ» | RU - РОССИЯ | 5000.00 |
| 110 | 7202300000 | ООО "МЕТАЛЛСТРОЙСНАБ" | RU - РОССИЯ | 21000.00 |
| 133 | 7202300000 | ООО "ФЕРРОЭКСПОРТ" | RU - РОССИЯ | 58000.00 |
| 147 | 7202300000 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ТОРГО... | RU - РОССИЯ | 78700.00 |
| 159 | 7202300000 | ООО НПТК"ОБЪЕДИНЕННАЯ СЫРЬЕВАЯ КОМПАНИЯ" | RU - РОССИЯ | 116055.00 |
| 216 | 7202300000 | АО "ЧЭМК" | RU - РОССИЯ | 23031000.00 |
Замечание: Здесь в качестве примера привели размера экспорта продукции 7202300000. ЧМЭК практически не имеет конкурентов по этой позиции.
# Таблица с ценами товаров по компаниям
price = df_all.groupby(['Код ТН ВЭД',
'Изготовитель',
'Страна отправителя'])['Цена товара'].mean().to_frame().sort_values('Цена товара').reset_index()
# Сравнение цен конкретной продукции
price[price['Код ТН ВЭД']==7202300000]
| Код ТН ВЭД | Изготовитель | Страна отправителя | Цена товара | |
|---|---|---|---|---|
| 15 | 7202300000 | АО "ЧЭМК" | RU - РОССИЯ | 72.19 |
| 35 | 7202300000 | ООО "МЕТАЛЛСТРОЙСНАБ" | RU - РОССИЯ | 100.34 |
| 43 | 7202300000 | ООО НПТК"ОБЪЕДИНЕННАЯ СЫРЬЕВАЯ КОМПАНИЯ" | RU - РОССИЯ | 109.26 |
| 44 | 7202300000 | ООО "ФЕРРОЭКСПОРТ" | RU - РОССИЯ | 110.85 |
| 47 | 7202300000 | ООО «ФЕРРО-ЭКСПОРТ» | RU - РОССИЯ | 113.00 |
| 57 | 7202300000 | ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ТОРГО... | RU - РОССИЯ | 122.63 |
| 81 | 7202300000 | ООО "АВТОПИТЕР" | RU - РОССИЯ | 151.43 |
Замечание: По цене у ЧМЭК также нет конкурентов по этой позиции.
Мы рассмотрели внутренних конкурентов, опираясь на предоставленные данные.
Также пользуясь информацией из интернета можно выявить зарубежных конкурентов.
На мировом рынке ферросплавов ключевыми конкурентами АО "ЧЭМК" являются компании из следующих стран:
1. Китай.
Китай является крупнейшим производителем и экспортером ферросплавов.
Основные компании:
2. Индия.
Индия — второй по величине производитель ферросплавов.
Основные компании:
3. Южная Африка.
Южная Африка — крупный экспортер феррохрома.
Основные компании:
4. Казахстан.
Казахстан является крупным производителем ферросплавов благодаря доступности сырья и дешевой энергии.
Основные компании: